﻿#ifndef ZFILELOGGERPRIVATE_H
#define ZFILELOGGERPRIVATE_H

#include <QDateTime>
#include <QFile>
#include <QDebug>
#include <QMutex>

class ZFileLoggerPrivate
{
public:
    ZFileLoggerPrivate(const QString &file_path);
    ~ZFileLoggerPrivate();

    // 重定向符号函数
    ZFileLoggerPrivate &operator<<(const QString &msg);
    ZFileLoggerPrivate &operator<<(const QStringList &msgs);

    /**
     * @brief setNewLineSymbol
     *  设置文本换行符。'\n'或"\r\n"或'\r'，默认为'\n'
     */
    void setNewLineSymbol(const QString &);

    /**
     * @brief getLastErrorString
     *  获取最近一次的错误信息
     */
    QString getLastErrorString();

private:
    /**
     * @brief open
     *  打开日志文件
     */
    bool open();

    /**
     * @brief close
     *  关闭日志文件
     */
    void close();

private:
    // 换行符号
    QString         m_new_line_symbol;

    // 日志文件路径
    const QString   m_log_filepath;

    // 日志文件对象
    QFile           m_log_file;

    // 日志文件文本流
    QTextStream     m_out_stream;

    // 互斥锁
    QMutex          m_mutex;

    // 最后一条的错误信息
    QString         m_last_error_string;
};

#endif // ZFILELOGGERPRIVATE_H
